﻿/*** InstallForm - FlashFurc
 * ---
 * Author: IceDragon <icedragon@quickfox.org>
 * Web:    www.icerealm.org
 * ---
 * 
 * Copyright (c) 2010, IceRealm.org
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *   # Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   # Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *   # Neither the name of the IceRealm.org nor the names of its contributors
 *     may be used to endorse or promote products derived from this software
 *     without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace FlashFurc
{
    public partial class InstallForm : Form
    {
        public FlashFurcInstaller Installer = null;
        Thread installThread = null;

        public InstallForm()
        {
            InitializeComponent();
        }

        private void Install()
        {
            txtSource.Text = (Installer is FFIExisting) ? "Local install" : "Furcadia setup file";
            txtTarget.Text = Installer.Settings.InstallTarget;

            installThread = new Thread(Installer.Run);
            installThread.Start();
            refreshTimer.Start();
        }

        private void PostInstall()
        {
            try
            {
                while (installThread.IsAlive)
                {
                    installThread.Abort();
                    Thread.Sleep(200);
                }

                refreshTimer.Stop();
            }
            catch
            {
            }

            Close();
        }

        #region Event Handlers
        private void btnCancel_Click(object sender, EventArgs e)
        {
            PostInstall();
        }

        private void InstallForm_Load(object sender, EventArgs e)
        {
            Install();
        }

        private void refreshTimer_Tick(object sender, EventArgs e)
        {
            progress.Value = (int)(Installer.CurrentSize * (ulong)progress.Maximum / (Installer.TotalSize + 1));
            txtStatus.Text = Installer.Status;

            // If the thread dies, it probably finished.
            if (!installThread.IsAlive)
                PostInstall();
        }
        #endregion
    }
}
